package leagal_aid.util;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.json.JSONObject;

public class PlugUtils {
	
	/**
	 * 处理webuploader上传图片插件的方法，一般放在servlet中使用
	 * @param request 直接接受servlet中的request即可
	 * @param sPath 想要保存文件的位置，建议使用"/upload/"
	 * 			如果是图片：则用"/upload/img/"
	 * 			如果是文件：则用"/upload/file/"
	 * @param delUrl 处理删除图片逻辑的servlet地址
	 * @return  返回jsonString字符串，用于回传
	 * 			建议使用：
	 * 				response.setCharacterEncoding("utf-8");
	 * 				response.setContentType("text/html; charset=UTF-8");
	 * 				response.getWriter().write(jsonString);
	 * 				response.getWriter().flush();
	 */
	public static String webUploaderReceiveFile(HttpServletRequest request,String sPath,String delUrl) {
		String jsonString = "";
		//获取当前时间，用于创建子文件夹：newDir
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
		String newDir = df.format(new Date())+"/";
		//获取网站上传图片文件夹的本地目录"upload/img/"的真是路径，用于处理文件
		String serverPath = request.getSession().getServletContext().getRealPath(sPath)+newDir; 
		//获取存储文件的本地目录
		String resPath = request.getContextPath()+sPath+newDir;
		System.out.println(serverPath);
		//处理上传的文件
		// 1.创建DiskFileItemFactory对象，配置缓存用
		DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
		// 2. 创建 ServletFileUpload对象
		ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
		// 3. 设置文件名称编码
		servletFileUpload.setHeaderEncoding("utf-8");
		
		// 4. 开始解析文件
		try {
			List<FileItem> items = servletFileUpload.parseRequest(request);
			for (FileItem fileItem : items) {

				if (fileItem.isFormField()) { // >> 普通数据，这里用处不大
					String info = fileItem.getString("utf-8");
					//System.out.println("info111:" + info);
				} else { //  文件
					// 1.生成新的文件名
					//(1)获取上传文件本身的名字
					String fileName = fileItem.getName();
					//(2)抽取后缀名
					String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
					System.out.println(suffix);
					//(3)生成新的文件名，时间戳+上传文件的后缀名
					String name = String.valueOf(System.currentTimeMillis())+"."+suffix;
					//System.out.println();
					
					// 2. 获取文件的实际内容
					InputStream is = fileItem.getInputStream();
					//System.out.println(new File(serverPath + "/" + name).getPath());
					// 3. 保存文件
					//(1)新建一个文件对象，文件地址为真实路径					
					File newFile = new File(serverPath + "/" + name);
					//(2)保存文件，从输入流中将文件放到新的文件中
					FileUtils.copyInputStreamToFile(is,newFile);
					// System.out.println(newFile.getPath());
					
					//生成回传地址，用于显示文件
					String path = resPath + newFile.getName();
					
					//生成删除链接，删除的servlet地址为DelFile，这个也是要回传的
					String delpath =sPath+newDir+newFile.getName();
					String delurl = delUrl+"?file="+delpath;
					
					//通过将要发送的数据通过json打包，key需要和插件中的内容对应
					JSONObject json = new JSONObject();
					json.put("path", path);// 引用路径
					//插件中要求必须有该标志，否则不能确认是否上传成功
					json.put("status", "success");// 标识
					//为了方便删除，因此生成一个上传连接
					json.put("delurl", delurl);
					jsonString = json.toString();
							
				}

			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return jsonString;
	}
	
	public static void webUploadDelFile(HttpServletRequest request, HttpServletResponse response) throws IOException {
		System.out.println(request.getParameter("file"));
		String serverPath = request.getSession().getServletContext().getRealPath("/"); 
		String filePath = serverPath+request.getParameter("file");
		File file = new File(filePath);
		if (file.delete()) {
			JSONObject json = new JSONObject();
            json.put("status", "success");// 标识
            response.getWriter().write(json.toString());  
    		response.getWriter().flush();
		}
		
		System.out.println( file.getPath());
	}

}
